/* 
 * File:   Dibujador.cpp
 * Author: nahuel
 * 
 * Created on November 3, 2012, 11:16 AM
 */

#include "Dibujador.h"
#include <gdkmm/general.h>
#include <glibmm/fileutils.h>
#include <cairomm-1.0/cairomm/context.h>

#include <iostream> //DEBUG

Dibujador::Dibujador(Gtk::DrawingArea* drawingArea) {
	_drawingArea = drawingArea;
}

void Dibujador::SetImagenPajaro(std::string pathImagen) {
	_imagenPajaro = Gdk::Pixbuf::create_from_file(pathImagen.c_str());
}

void Dibujador::SetImagenCerdito(std::string pathImagen) {
	_imagenCerdito = Gdk::Pixbuf::create_from_file(pathImagen.c_str());
}

void Dibujador::SetImagenCaja(std::string pathImagen) {
	_imagenCaja = Gdk::Pixbuf::create_from_file(pathImagen.c_str());
}

void Dibujador::SetImagenFondo(std::string pathImagen) {
	_fondo = Gdk::Pixbuf::create_from_file(pathImagen.c_str());
}

void Dibujador::DibujarFondo() {
	Cairo::RefPtr<Cairo::Context> context = 
			_drawingArea->get_window()->create_cairo_context();
	
	context->save();
	
	// Reescalamos la imagen al tamanho de la pantalla
	Glib::RefPtr<Gdk::Pixbuf> fondoReescalado = _fondo->scale_simple(
			_drawingArea->get_width(), 
			_drawingArea->get_height(), 
			Gdk::INTERP_NEAREST);
	
	Gdk::Cairo::set_source_pixbuf(context, fondoReescalado, 0, 0);
	context->rectangle(0, 0, _drawingArea->get_width(), _drawingArea->get_height());
	context->fill();
	
	context->restore();
}

void Dibujador::DibujarPajaro(unsigned int x, unsigned int y) {
	//Get context
	Cairo::RefPtr<Cairo::Context> context = 
			_drawingArea->get_window()->create_cairo_context();
	
	context->save();
	
	Gdk::Cairo::set_source_pixbuf(context, _imagenPajaro, x, y);	
//	context->set_source_rgb(0, 0, 0);	// Dibuja en negro
	context->arc(x, y, _imagenPajaro->get_width(), 0, 2*M_PI);
	context->fill();
	context->stroke();
	  
	context->restore();	
}

void Dibujador::DibujarCerdito(unsigned int x, unsigned int y) {
	//Get context
	Cairo::RefPtr<Cairo::Context> context = 
			_drawingArea->get_window()->create_cairo_context();
	
	context->save();
	
	Gdk::Cairo::set_source_pixbuf(context, _imagenCerdito, x, y);	
//	context->set_source_rgb(0, 0, 0);	// Dibuja en negro
	context->arc(x, y, _imagenCerdito->get_width(), 0, 2*M_PI);
	context->fill();
	context->stroke();
	  
	context->restore();	
}

void Dibujador::DibujarCaja(unsigned int x, unsigned int y) {
	//Get context
	Cairo::RefPtr<Cairo::Context> context = 
			_drawingArea->get_window()->create_cairo_context();
	
	context->save();
	
	Gdk::Cairo::set_source_pixbuf(context, _imagenCaja, x, y);	
//	context->set_source_rgb(0, 0, 0);	// Dibuja en negro
	context->arc(x, y, _imagenCaja->get_width(), 0, 2*M_PI);
	context->fill();
	context->stroke();
	  
	context->restore();	
	
}

void Dibujador::DibujarLinea(unsigned int x1, unsigned int y1, 
							  unsigned int x2, unsigned int y2) {
	//Get context
	Cairo::RefPtr<Cairo::Context> context = 
			_drawingArea->get_window()->create_cairo_context();
	
	context->save();
	
	context->set_source_rgb(0, 0, 0);	// Dibuja en negro
	context->move_to(x1, y1);
	context->line_to(x2, y2);
	context->stroke();
	  
	context->restore();	
}

Dibujador::~Dibujador() {}

